package com.asen.commons.utils;

import org.springframework.util.Assert;
import org.springframework.util.ObjectUtils;

import java.math.BigDecimal;

/**
 * Assert工具类
 *
 * @author Gary
 * @version 1.0
 * @date 2018-11-10
 */
public class BaseAssert extends Assert {

    /**
     * 检查字符串expect应不为空，否则 assert异常
     *
     * @param expect  not empty
     * @param message
     */
    public static void notEmpty(String expect, String message) {
        if (StringUtils.isEmpty(expect)) {
            throw new IllegalArgumentException(message);
        }
    }

    /**
     * 检查字符串expect应为空，否则 assert异常
     *
     * @param expect  empty
     * @param message
     */
    public static void empty(String expect, String message) {
        if (StringUtils.isNotEmpty(expect)) {
            throw new IllegalArgumentException(message);
        }
    }

    /**
     * 数组array应不为空或0，否则抛出提示信息
     *
     * @param array
     */
    public static void notEmpty(String[] array) {
        notEmpty(array, "数组不能为空，且至少要有一个元素");
    }

    /**
     * id应不为空或0，否则抛出message
     *
     * @param id
     * @param message
     */
    public static void notEmpty(Long id, String message) {
        if (id == null || id == 0L) {
            throw new IllegalArgumentException(message);
        }
    }

    /**
     * value应为空或0，否则抛出message
     *
     * @param value
     * @param message
     */
    public static void empty(Integer value, String message) {
        if (value != null && value != 0) {
            throw new IllegalArgumentException(message);
        }
    }

    /**
     * value不能为空或0，否则抛出message
     *
     * @param value
     * @param message
     */
    public static void notEmpty(Integer value, String message) {
        if (value == null || value == 0) {
            throw new IllegalArgumentException(message);
        }
    }

    /**
     * value不能为空或0，否则抛出message
     *
     * @param value
     * @param message
     */
    public static void notEmpty(BigDecimal value, String message) {
        if (DecimalUtils.isEmpty(value)) {
            throw new IllegalArgumentException(message);
        }
    }

    /**
     * value为空或0，否则抛出message
     *
     * @param value
     * @param message
     */
    public static void empty(BigDecimal value, String message) {
        if (DecimalUtils.isNotEmpty(value)) {
            throw new IllegalArgumentException(message);
        }
    }

    /**
     * 检查expect应为true，否则 assert异常
     *
     * @param expect  期望值
     * @param message 提示消息
     */
    public static void check(boolean expect, String message) {
        if (!expect) {
            throw new IllegalArgumentException(message);
        }
    }

    /**
     * 检查expect应为false，否则 assert异常
     *
     * @param expect  期望值
     * @param message 提示消息
     */
    public static void isFalse(boolean expect, String message) {
        if (expect) {
            throw new IllegalArgumentException(message);
        }
    }

    /**
     * 检查o1与o2应为相等，否则 assert异常
     *
     * @param o1      对象1
     * @param o2      对象2
     * @param message 提示消息
     */
    public static void notEqual(Object o1, Object o2, String message) {
        if (!ObjectUtils.nullSafeEquals(o1, o2)) {
            throw new IllegalArgumentException(message);
        }
    }

    /**
     * 检查expect应为true，否则 assert异常
     *
     * @param expect  期望值
     * @param message 提示消息
     */
    public static void notTrue(boolean expect, String message) {
        if (!expect) {
            throw new IllegalArgumentException(message);
        }
    }

}
